#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
const int N=1510;
char b[N][N];
int st[2*N][2*N];
int st1[N][N];
int n,m,nn,mm;
bool dfs(int x,int y)
{
	if(x==nn)
	{
		if(dfs(0,y)) return true;
		return false;
	}
	if(x==-1)
	{
		if(dfs(nn-1,y)) return true;
		return false;
	}
	if(y==mm)
	{
		if(dfs(x,0)) return true;
		return false;
	}
	if(y==-1)
	{
		if(dfs(x,mm-1)) return true;
		return false;
	}
	if(st[x][y] || b[x%n][y%m]=='#') return false;
	if(st1[x%n][y%m]) 
	{
	     return true;
    }
	st[x][y]=1;
	st1[x%n][y%m]=1;
	if(dfs(x+1,y)) return true;
	if(dfs(x,y+1)) return true;
	if(dfs(x,y-1)) return true;
	if(dfs(x-1,y)) return true;
	return false;
}
int main()
{
	
	while(cin>>n>>m)
	{
	   nn=n*2;
	   mm=m*2;
	   int x,y;
	   for(int i=0;i<n;i++)
	   {
		   for(int j=0;j<m;j++)
		   {
			    cin>>b[i][j];
			    if(b[i][j]=='S')
			    {
			    	x=i;
			    	y=j;
				}
		   }
	   }
	   if(dfs(x,y)) cout<<"Yes";
	   else cout<<"No";
	   cout<<'\n';
	   memset(st1,0,sizeof(st1));
	   memset(st,0,sizeof(st));
	}
	

	return 0;
}
